#include <iostream>
using std::cout;
using std::endl;

void test0(){
    int * p = (int*)malloc(sizeof(int));
    free(p);
    
    int * p2 = static_cast<int*>(malloc(sizeof(int)));
    free(p2);

    const char * pstr = "hello";
    /* int * pint = (int*)pstr; */
    //static_cast对强制转换做了一些区分，
    //不允许一些容易出错的转换发生
    //还有一个好处，方便查找
    /* int * pint2 = static_cast<int*>(pstr); */
}


//const_cast去除常量属性的效果
void func(int * px){
    *px = 100;//这里的修改确实完成了修改，但是并没有放回内存
    //而是在寄存器中存储
    cout << "px:" << px << endl;
    cout << "*px:" << *px << endl; 

}

void test1(){
    const int number = 10;
    //这里发生一个隐式的指向
    //const int * p = &number;
    //把这个常量指针传给了func函数
    //func函数需要接收的参数是一个普通的int*
    /* func(&number); */
    func(const_cast<int*>(&number));
    cout << "number:" << number << endl;
    cout << "&number:" << &number << endl;
}


int main(void){
    /* test0(); */
    test1();
    return 0;
}
